#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "shmem.h"
#include "shmem.h"

static struct shm_param shm;

union val_t{
    int b_val;
    int i_val;
    float f_val;
};
struct std_node{
    int key;
    int type ;
    int dev_type;
    union val_t old_val;
    union val_t new_val;
    int ret;
};
//static int *total;  //指向共享内存中数据节点总个数
static struct std_node *node_arr;  //指向共享内存中节点缓存数组头

#define MAX_NODE 128  //最大支持学生数目
#define STD_NODE_LEN sizeof(struct std_node)
#define MAX_NODE_SIZE (MAX_NODE * STD_NODE_LEN)
int main(int argc, char *argv[])
{
    int ret = -1;

    ret = shm_init(&shm, "shm", MAX_NODE_SIZE);
    if(ret < 0)
    {
        return -1;
    }
    void *node_p = shm_getaddr(&shm);
    if(node_p == NULL)
    {
        return -1;
    }
    node_arr = (struct std_node *)(node_p+sizeof(int));
    int n =*(int *)node_p;
    while(1){
    for(int i=0; i<n; i++)
    {
        if(node_arr[i].type==3){
        printf("key = %d,type=%d,value =%.2f\n",node_arr[i].key,node_arr[i].type,node_arr[i].new_val.f_val);
       }
       else if(node_arr[i].type==2)
       {
        printf("key = %d,type=%d,value =%d\n",node_arr[i].key,node_arr[i].type,node_arr[i].new_val.i_val);
       }
    }
    sleep(1);
    }


    return 0;
}